package com.ruoyi.wms.service.impl;

import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.wms.mapper.WmsAreaManagerMapper;
import com.ruoyi.wms.domain.WmsAreaManager;
import com.ruoyi.wms.service.IWmsAreaManagerService;

/**
 * 库区管理员Service业务层处理
 * 
 * @author ruoyi
 * @date 2024-01-01
 */
@Service
public class WmsAreaManagerServiceImpl implements IWmsAreaManagerService 
{
    @Autowired
    private WmsAreaManagerMapper wmsAreaManagerMapper;

    /**
     * 查询库区管理员
     * 
     * @param id 库区管理员主键
     * @return 库区管理员
     */
    @Override
    public WmsAreaManager selectWmsAreaManagerById(Long id)
    {
        return wmsAreaManagerMapper.selectWmsAreaManagerById(id);
    }

    /**
     * 查询库区管理员列表
     * 
     * @param wmsAreaManager 库区管理员
     * @return 库区管理员
     */
    @Override
    public List<WmsAreaManager> selectWmsAreaManagerList(WmsAreaManager wmsAreaManager)
    {
        // 设置租户ID
        wmsAreaManager.setTenantId(SecurityUtils.getTenantId());
        return wmsAreaManagerMapper.selectWmsAreaManagerList(wmsAreaManager);
    }

    /**
     * 新增库区管理员
     * 
     * @param wmsAreaManager 库区管理员
     * @return 结果
     */
    @Override
    public int insertWmsAreaManager(WmsAreaManager wmsAreaManager)
    {
        wmsAreaManager.setTenantId(SecurityUtils.getTenantId());
        
        // 检查用户和区域的唯一性约束
        WmsAreaManager existingManager = wmsAreaManagerMapper.selectWmsAreaManagerByUserAndArea(
            wmsAreaManager.getUserId(), wmsAreaManager.getAreaId(), wmsAreaManager.getTenantId());
        if (existingManager != null) {
            throw new RuntimeException("该用户已经是此区域的管理员，不能重复分配");
        }
        
        wmsAreaManager.setCreateBy(SecurityUtils.getUsername());
        wmsAreaManager.setCreateTime(DateUtils.getNowDate());
        return wmsAreaManagerMapper.insertWmsAreaManager(wmsAreaManager);
    }

    /**
     * 修改库区管理员
     * 
     * @param wmsAreaManager 库区管理员
     * @return 结果
     */
    @Override
    public int updateWmsAreaManager(WmsAreaManager wmsAreaManager)
    {
        // 检查用户和区域的唯一性约束（排除当前记录）
        WmsAreaManager existingManager = wmsAreaManagerMapper.selectWmsAreaManagerByUserAndArea(
            wmsAreaManager.getUserId(), wmsAreaManager.getAreaId(), SecurityUtils.getTenantId());
        if (existingManager != null && !existingManager.getId().equals(wmsAreaManager.getId())) {
            throw new RuntimeException("该用户已经是此区域的管理员，不能重复分配");
        }
        
        wmsAreaManager.setUpdateBy(SecurityUtils.getUsername());
        wmsAreaManager.setUpdateTime(DateUtils.getNowDate());
        return wmsAreaManagerMapper.updateWmsAreaManager(wmsAreaManager);
    }

    /**
     * 批量删除库区管理员
     * 
     * @param ids 需要删除的库区管理员主键
     * @return 结果
     */
    @Override
    public int deleteWmsAreaManagerByIds(Long[] ids)
    {
        return wmsAreaManagerMapper.deleteWmsAreaManagerByIds(ids);
    }

    /**
     * 删除库区管理员信息
     * 
     * @param id 库区管理员主键
     * @return 结果
     */
    @Override
    public int deleteWmsAreaManagerById(Long id)
    {
        return wmsAreaManagerMapper.deleteWmsAreaManagerById(id);
    }

    /**
     * 根据用户ID查询库区管理员列表
     * 
     * @param userId 用户ID
     * @return 库区管理员集合
     */
    @Override
    public List<WmsAreaManager> selectWmsAreaManagerByUserId(Long userId)
    {
        return wmsAreaManagerMapper.selectWmsAreaManagerByUserId(userId, SecurityUtils.getTenantId());
    }

    /**
     * 根据库区ID查询管理员列表
     * 
     * @param areaId 库区ID
     * @return 库区管理员集合
     */
    @Override
    public List<WmsAreaManager> selectWmsAreaManagerByAreaId(Long areaId)
    {
        return wmsAreaManagerMapper.selectWmsAreaManagerByAreaId(areaId, SecurityUtils.getTenantId());
    }
}